import axios from "axios";
import { ElMessage } from "element-plus";
import router from "@/router";

// const baseURL = "http://localhost:8080/admin"
const baseURL = "http://81.70.215.99/api/admin"

export { baseURL }

const service = axios.create({
  baseURL: baseURL,
});

// 请求拦截器
service.interceptors.request.use(
  (config) => {
    // 可以在这里添加 token
    const userInfo = JSON.parse(localStorage.getItem("userInfo"));

    if (userInfo && userInfo !== "undefined") {
      config.headers["Content-Type"] = "application/json;charset=utf-8";
      config.headers["Authorization"] = `${userInfo.token}`;
    }
    return config;
  },
  (error) => {
    console.error("请求错误:", error);
    return Promise.reject(error);
  }
);

// 响应拦截器
service.interceptors.response.use(
  (response) => {
    const res = response.data;
    if (res.status === 200) {
      return res;
    } 
    else if (res.status === 401) {
      // 提示用户登录过期
      ElMessage.error("登录过期，请重新登录");
      // 清除用户本地缓存中的 userInfo 和 token
      localStorage.removeItem("userInfo");
      // 跳转到登录页面
      router.push("/login");
    }
    else {
      // 统一提示用户错误信息（不用在catch里面提示用户了）
      ElMessage.error(res.msg || "请求失败");
      // 传递错误信息给调用者（用于catch里面回滚）
      // 可以改为不仅仅返回res.msg，把整个res返回，因为调用者可能根据不同的status来做不同的事情
      // 在我的项目中仅仅返回res.msg就够了，因为status都是500
      return Promise.reject(new Error(res.msg || "请求失败"));
    }
  },
  (error) => {
    // 统一提示用户错误信息（不用在catch里面提示用户了）
    ElMessage.error(error.message || "网络错误");
    // 传递错误信息给调用者（用于catch里面回滚）
    return Promise.reject(error);
  }
);

export default service;